package com.appleyk.config5;

import com.appleyk.service.IService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * <p>越努力，越幸运</p>
 *
 * @author appleyk
 * @version V.0.1.1
 * @blob https://blog.csdn.net/appleyk
 * @date created on  10:42 下午 2020/12/9
 */
public class ImportContext5 {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(ConfigA.class);
        IService bean = context.getBean(IService.class);
        bean.say();
        /***
         * 如果延迟的话，肯定是先注入A的
         * 跟源码会发现，DeferredImportSelector接口的实现类的处理，是在处理完@Configuration修饰的配置类之后的
         * 因此，A作为@Configuration修饰的类，所在ConfigA中加了@DeferredEnableService注解，也显示的指定了
         * 要导入的B配置类的属性，但由于@DeferredEnableService注解还有另外一个注解@Import，其指向了一个实现了
         * DeferredImportSelector接口的类，类中虽然也强调了要导入B配置类，但是，由于延迟导入是在@Configuration后
         * 因此，这里输出的结果是：AService say. 也就是A先完成导入，然后是B，结果B发现已经存在IService的实例了
         * 因此，BService不会再导入了
         */
    }
}
